Feature: implement gameclock

In order to get the game updated and drawn at the right times
I as a developer
want to have a gameclock to register callbacks so I do not have to worry about it anymore.

# Scenario: the duration of update is less than draw
# Given a gameclock
# When the duration of update is less than draw
# Then the gameclock should still work as normal

# Scenario: the duration of update is less than draw
# Given a gameclock
# When the duration of update is less than draw
# Then the gameclock should still work as normal

# Scenario: the duration of update plus draw exceeds their intervals
# Given a gameclock
# When the duration of update plus draw exceeds their intervals
# Then it should slow down

Scenario: registering a update callback
Given a gameclock
When an update callback is registered
Then the update timer will be scheduled for callback

# Scenario: registering a draw callback (for throttled FPS)
# Given a gameclock
# When a draw callback is registered
# Then the draw timer will be scheduled for callback

# Scenario: registering a draw callback (for unthrottled FPS)
# Given a gameclock
# When a draw callback is registered
# Then the draw callback will be called every chance it gets

# Scenario: update callback is called in the given interval
# Given a gameclock
# When the update time has come
# Then the update callback is called

# Scenario: draw callback is called in the given interval
# Given a gameclock
# When the draw time has come
# Then the draw callback is called

# Scenario: on fast hardware draw as fast as possible
# Given a gameclock and fast hardware
# When FPS is not throttled and its not calling update
# Then its calling draw_frame repeatedly until next update time has arrived

# Scenario: on fast hardware updates are called in the given interval
# Given a gameclock and fast hardware
# When a update interval has passed
# Then the update callback is called

# Scenario: on fast enough hardware the gameclock should drift minimally over time
# Given a gameclock and fast enough hardware
# When updates and/or frames run longer than their intervals
# Then the actual time of the gameclock does not drift compared to the real time

# Scenario: on slow hardware draw and update slow down
# Given a gameclock and slow hardware
# When updates and/or frames run longer than their intervals
# Then it should call update as fast as possible
# And call frame at least one time per max=N updates
# And the actual time of the gameclock does not drift compared to the real time

# (YES: but we don't need this one unless the previous scenario should be broken down to smaller scenarios.)
# Scenario: on slow hardware draw should still be called in between updates
# Given a gameclock and slow hardware
# When updates take too long
# Then a draw call should be called for each update call (??)



# frame: render frame
# fps:    frames per second
# tpf:    time per frame

# update:   simulation update
# ups:    ticks per second
# tpu:    time per update

# The gameclock should work as follows:
    # if 


